﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Reflection;
using KPWeb.Class;

namespace KPWeb.Data
{
    public class UprawnieniaLogowanie
    {
        public static string GetHaslo(int osobaID, string uprawnienia)
        {
            using (DBContainer db = new DBContainer())
            {

                return (db.vKP_Uprawnienia.Where(a => a.OsobaID == osobaID && a.Uprawnienia == uprawnienia).Single().Haslo);
            }
        }
        public static string GetOsobaUprawnienia(int osobaID, string login)
        {
            using (DBContainer db = new DBContainer())
            {

                return (db.vKP_Uprawnienia.Where(a => a.OsobaID == osobaID && a.Login == login).Single().Uprawnienia);
            }
        }
        public static int GetOsobaUprawnieniaIDFunkcja(int osobaID, string uprawnienia)
        {
            using (DBContainer db = new DBContainer())
            {

                return (db.vKP_Uprawnienia.Where(a => a.OsobaID == osobaID && a.Uprawnienia == uprawnienia).Single().UprawnieniaID);
            }
        }
        public static int GetOsobaID(string login, string haslo,string uprawnienia)
        {
            using (DBContainer db = new DBContainer())
            {
                int iTemp = db.vKP_Uprawnienia.Where(a => a.Login == login && a.Haslo == haslo && a.Uprawnienia==uprawnienia).Count();

                return (iTemp == 0 ? -1 : db.vKP_Uprawnienia.Where(a => a.Login == login && a.Haslo == haslo && a.Uprawnienia == uprawnienia).Single().OsobaID);
            }
        }

        public static Boolean JestOsobaZUprawnieniami(int osobaID, string uprawnienia)
        {
            using (DBContainer db = new DBContainer())
            {
                return db.vKP_Uprawnienia.Where(a => a.OsobaID == osobaID && a.Uprawnienia == uprawnienia).Count() != 0;
            }
        }
      
        private static Boolean JestOsobaWUprawnieniach(string pesel,string uprawnienia)
        {
            using (DBContainer db = new DBContainer())
            {
                return db.vKP_Uprawnienia.Where(a => a.Pesel == pesel && a.Uprawnienia==uprawnienia).Count() != 0;
            }
        }
        public static Boolean JestLoginWUprawnieniach(string login)
        {
            using (DBContainer db = new DBContainer())
            {
                return (db.KP_Uprawnienia.Where(a => a.Login  == login).Count() > 0);
            }
        }
        public static Boolean JestLoginEmailWUprawnieniach(string login,string email,string uprawnienia)
        {
            using (DBContainer db = new DBContainer())
            {
                return (db.KP_Uprawnienia.Where(a => a.Login == login && a.Email == email && a.Uprawnienia == uprawnienia).Count() > 0);
            }
        }
        public static void UpdateHaslo(int osobaID,  string uprawnienia, string haslo)
        {
            using (DBContainer db = new DBContainer())
            {
                    var wiz = db.KP_Uprawnienia.Where(a => a.OsobaID == osobaID && a.Uprawnienia == uprawnienia).Single();
                    wiz.Haslo = haslo;
                    db.SaveChanges();
             
            }
        }
        public static void InsertUpdateUprawnieniaRejestracja(int osobaID,string login,string pesel, string email,
             string haslo,string hasloPocz,string uprawnienia,string blokadaKonta,int liczbaBlednych,string active)
        {
            using (DBContainer db = new DBContainer())
            {

                if (!UprawnieniaLogowanie.JestLoginEmailWUprawnieniach(login, email, uprawnienia))
                {
                    KP_Uprawnienia e = new KP_Uprawnienia();
                    e.OsobaID = -1;
                    e.Uprawnienia = Stale.uprMoje;
                    e.Login = login;
                    e.Pesel = null;
                    e.Email = email;
                    e.Haslo = null;
                    e.HasloPoczatkowe = hasloPocz;
                    e.BlokadaKonta = "t";
                    e.DataHaslaPocz = DateTime.Now;
                    e.LiczbaBlednychPolaczen = 0;
                    e.active = "t";
                    db.KP_Uprawnienia.AddObject(e);
                    db.SaveChanges();

                }
                else
                {

                    var wiz = db.KP_Uprawnienia.Where(a => a.Login == login && a.Email == email && a.Uprawnienia == Stale.uprMoje).Single();
                    if (osobaID!=-1) wiz.OsobaID =osobaID;
                    if (pesel != "") wiz.Pesel = pesel;
                    if (haslo != "") wiz.Haslo = haslo;
                    if (uprawnienia != "") wiz.Uprawnienia = uprawnienia;
                    if (blokadaKonta != "") wiz.BlokadaKonta = blokadaKonta;
                    if (liczbaBlednych == -1) wiz.LiczbaBlednychPolaczen = liczbaBlednych;
                    if (active != "") wiz.active = active;
          
                    db.SaveChanges();

                }
            }
        }
        public static void InsertUpdateRejestracjaHasloPoczatkowe( string login, string email, string hasloPocz,string uprawnienia)
        {
            using (DBContainer db = new DBContainer())
            {

                if (!UprawnieniaLogowanie.JestLoginEmailWUprawnieniach(login, email,uprawnienia))
                {
                    KP_Uprawnienia e = new KP_Uprawnienia();
                    e.OsobaID = -1;
                    e.Uprawnienia = Stale.uprMoje;
                    e.Login = login;
                    e.Pesel = null;
                    e.Email = email;
                    e.Haslo = null;
                    e.HasloPoczatkowe = hasloPocz;
                    e.BlokadaKonta = "t";
                    e.DataHaslaPocz = DateTime.Now;
                    e.LiczbaBlednychPolaczen = 0;
                    e.active = "t";
                    db.KP_Uprawnienia.AddObject(e);
                    db.SaveChanges();

                }
                else
                {

                    var wiz = db.KP_Uprawnienia.Where(a => a.Login == login && a.Email == email && a.Uprawnienia == Stale.uprMoje).Single();
                   
                    wiz.LiczbaBlednychPolaczen = 0;
                    wiz.BlokadaKonta= "t";
                    wiz.HasloPoczatkowe = hasloPocz;
                    wiz.DataHaslaPocz = DateTime.Now;
                    wiz.Haslo = null;
                    wiz.active = "t";

                    db.SaveChanges();

                }
            }
        }

        public static void InsertDodatkoweUprawnienia(string pesel,  string uprawnienia)
        {// dla  osoby mającej uprawnienie M
            using (DBContainer db = new DBContainer())
            {

                if (!JestOsobaWUprawnieniach(pesel, uprawnienia))
                {
                    var wiz = db.KP_Uprawnienia.Where(a => a.Pesel == pesel && a.Uprawnienia ==Stale.uprMoje).Single();
                  
                    KP_Uprawnienia e = new KP_Uprawnienia();
                    e.OsobaID = wiz.OsobaID;
                    e.Pesel = pesel;
                    e.Uprawnienia = uprawnienia;
                    e.Login = wiz.Login;
                    e.Email = wiz.Email;
                    e.Haslo = wiz.Haslo;
                    e.HasloPoczatkowe = wiz.HasloPoczatkowe;
                    e.DataHaslaPocz = wiz.DataHaslaPocz;
                    e.LiczbaBlednychPolaczen =wiz.LiczbaBlednychPolaczen;
                    e.BlokadaKonta = wiz.BlokadaKonta;
                    e.active = "t";
                    db.KP_Uprawnienia.AddObject(e);
                    db.SaveChanges();
                }


            }
        }

        public static IEnumerable<vLex_TypUprawnien> GetListaUprawnien()
        {
            using (DBContainer db = new DBContainer())
            {
                return (db.vLex_TypUprawnien.OrderBy(a => a.NazwaUprawnien).ToArray());
            }
        }


             public static Boolean HasloPoczatkoweOK(string login,string hasloPoczatkowe)
        {
            using (DBContainer db = new DBContainer())
            {
                string sTemp=Szyfrowanie.EncodePassword(hasloPoczatkowe);
                return (db.KP_Uprawnienia.Where(a => a.Login  == login && a.HasloPoczatkowe==sTemp).Count() > 0);
            }
        }
     
        
        
        public static IEnumerable<vKP_UprawnieniaOsobaJednostka> GetListaUprawnienOsobaJednostka(string pesel)
             {
                 using (DBContainer db = new DBContainer())
                 {
                     return (db.vKP_UprawnieniaOsobaJednostka.Where(a => a.Pesel == pesel).ToArray());
                 }
             }
        public Boolean CzyOsobaFunkcyjna(int  ID)
        {
            //string pesel = pobierz(ID);
            using (DBContainer db = new DBContainer())
            {
               IEnumerable<vKP_Uprawnienia> tempList=db.vKP_Uprawnienia.Where(a => a.OsobaID == ID).ToArray();
               foreach (vKP_Uprawnienia item in tempList)
               {
                   if (item.Uprawnienia == "K" || item.Uprawnienia == "D" ) return true;
               }
               return false;
            }
        }
    }
}